home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 172_01 / lexlex.h < prev    next >
Text File  |  1980-01-01  |  6KB  |  169 lines

  1. /*
  2.   HEADER:              CUG  nnn.nn;
  3.   TITLE:               LEX - A Lexical Analyser Generator
  4.   VERSION:             1.1 for IBM-PC
  5.   DATE:                Jan 30, 1985
  6.   DESCRIPTION:         A Lexical Analyser Generator. From UNIX
  7.   KEYWORDS:            Lexical Analyser Generator YACC C PREP
  8.   SYSTEM:              IBM-PC and Compatiables
  9.   FILENAME:            LEXLEX.H
  10.   WARNINGS:            This program is not for the casual user. It will
  11.                        be useful primarily to expert developers.
  12.   CRC:                 N/A
  13.   SEE-ALSO:            YACC and PREP
  14.   AUTHORS:             Charles H. Forsyth
  15.                        Scott Guthery 11100 leafwood lane Austin, TX 78750
  16.                        Andrew M. Ward, Jr.  Houston, Texas (Modifications)
  17.   COMPILERS:           LATTICE C
  18.   REFERENCES:          UNIX Systems Manuals -- Lex Manual on distribution disks
  19. */
  20.  
  21. /*
  22.  * Copyright (c) 1978 Charles H. Forsyth
  23.  *
  24.  * Modified 02-Dec-80 Bob Denny -- Conditionalize debug code for reduced size
  25.  * Modified 29-May-81 Bob Denny -- Clean up overlay stuff for RSX.
  26.  * More     19-Mar-82 Bob Denny -- New C library & compiler
  27.  * More     03-May-82 Bob Denny -- Final touches, remove unreferenced autos
  28.  * More     29-Aug-82 Bob Denny -- Clean up -d printouts
  29.  * More     29-Aug-82 Bob Denny -- Reformat for readability and comment
  30.  *                                 while learning about LEX.
  31.  * More     20-Nov-83 Scott Guthery -- Adapt for IBM PC & DeSmet C
  32.  *
  33.  * Modified 22-Jun-86 Andrew Ward -- Modified code to compile under Lattice C
  34.  *                                 version 3.0h.  Corrected several errors
  35.  *                                 from the assumption that pointers and
  36.  *                                 integers are the same size.
  37.  *                                 New debug code for LATTICE C using assert
  38.  *                                 to test for wild pointers.
  39.  */
  40.  
  41. /* #define DEBUG */
  42. #define LATTICE
  43. /*
  44.  * Original allocations.
  45.  */
  46. #define NCHARS  0400    /* Size of character set */
  47. #define NCPW    2       /* # characters per word was 2*/
  48. #define NBPC    8       /* # bits per character */
  49. #define NBPW    (NCPW*NBPC)     /* # bits per word */
  50.  
  51. #define MAXNFA  600     /* Number of NFA states */
  52. #define MAXDFA  800     /* Number of DFA states */
  53. #define NTRANS  128     /* Number of translations */
  54. #define NCCLS    50     /* Number of character classes */
  55. #define NNEXT  2400     /* Size of dfa move vectors (later: allocate) */
  56. #define CMASK  '\377'    /* Character mask */
  57. /*
  58.  * Special node characters.
  59.  */
  60. #define CCL     NCHARS          /* One of a character class */
  61. #define EPSILON NCHARS+1        /* Transition on epsilon */
  62. #define FIN     NCHARS+2        /* Final state; NFA */
  63.  
  64. /*
  65.  * Set of state numbers (dfa state name).
  66.  */
  67. struct  set {
  68.         struct  set     *s_next;
  69.         struct  dfa     *s_state;       /* pointer into dfa array  */
  70.         struct  set     *s_group;       /* pointer to owning group (dfamin) */
  71.         int     s_final;                /* nf state which matches  */
  72.         int     s_flag;                 /* see below */
  73.         int     s_look;                 /* look-ahead bits */
  74.         int     s_len;                  /* number of elements in set */
  75.         struct nfa *s_els[1];
  76. };
  77.  
  78. /*
  79.  * State entry
  80.  */
  81. struct  nfa {
  82.         int     n_char;
  83.         char    *n_ccl;
  84.         int     n_flag;
  85.         int     n_look;         /* lookahead index */
  86.         struct  nfa     *n_succ[2];
  87.         struct  trans   *n_trans;
  88. };
  89.  
  90. /*
  91.  * DFA transition entry.
  92.  */
  93. struct  move {
  94.         struct  set     *m_next;
  95.         struct  dfa     *m_check;
  96. };
  97.  
  98. /*
  99.  * Structure of DFA vector.
  100.  */
  101. struct  dfa {
  102.         struct  set     *df_name;
  103.         struct  move    *df_base;
  104.         struct  move    *df_max;
  105.         struct  dfa     *df_default;
  106.         int     df_ntrans;
  107. };
  108.  
  109. /*
  110.  * s_flag values for DFA node
  111.  */
  112.  
  113. #define LOOK    01      /* Lookahead mark */
  114. #define ADDED   02      /* DFA construction mark */
  115. #define FLOOK   04      /* Mark on final state of lookahead translation */
  116.  
  117. /*
  118.  * Flag used to print node
  119.  */
  120. #define NPRT    010     /* NFA node printed */
  121.  
  122. /*
  123.  * Transition set.
  124.  */
  125. struct  xset {
  126.         struct  set     *x_set;
  127.         int     x_char;
  128.         int     x_defsame;
  129. };
  130.  
  131. /*
  132.  * Translations
  133.  */
  134. struct  trans {
  135.     struct  nfa     *t_start;
  136.     struct  nfa     *t_final;
  137. };
  138.  
  139. /*
  140.  * External definitions.
  141.  */
  142. extern  struct  trans   trans[NTRANS];
  143. extern  struct  trans   *transp;
  144. extern  struct  nfa     nfa[MAXNFA];
  145. extern  struct  nfa     *nfap;
  146. extern  struct  dfa     dfa[MAXDFA];
  147. extern  int     ndfa;
  148. extern  struct  move    move[NNEXT]; /* AMW: was move[]; */
  149. extern  struct  xset    sets[NCHARS]; /* AMW: was sets[]; */
  150. extern  char    insets[NCHARS];
  151. extern  struct  set     *setlist;
  152. extern  char    ccls[NCCLS][(NCHARS+1)/NBPC];
  153. extern  char    *newccl(char *);
  154. extern  struct  nfa *newnfa(int, struct nfa *, struct nfa *);
  155. extern  struct  trans *newtrans(struct nfa *, struct nfa *);
  156. extern  int     nccls;
  157. extern  int     llnxtmax;
  158. extern  char    *tabname;
  159. extern  FILE    *llout;
  160. extern  FILE    *lexin;
  161. extern  int     aflag;
  162. extern  int     sflag;
  163. extern  char    infile[]; /* AMW: Was *infile */
  164. extern  FILE    *lexlog;
  165. extern  int     lldebug;
  166. extern  int     mflag;
  167.  
  168. xtern  char    infile[]; /* AMW: Was *infile */
  169. extern  FILE